import { getConfigByKey } from '@/api/config'
import { HttpStatus } from '@/api/types'

/**
 * 配置帮助类，封装配置获取相关功能
 */
export class ConfigHelper {
  /**
   * 缓存配置，避免重复请求
   */
  private static configCache: Record<string, any> = {}

  /**
   * 获取单个配置
   * @param key 配置键
   * @param defaultValue 默认值
   * @returns 配置值
   */
  public static async getConfig(key: string, defaultValue: any = null): Promise<any> {
    // 检查缓存
    if (key in this.configCache) {
      return this.configCache[key]
    }

    try {
      const response = await getConfigByKey(key)
      if (response.statusCode === HttpStatus.OK && response.data) {
        // 解析配置值（如果是JSON字符串）
        let value = response.data.value
        try {
          value = JSON.parse(String(value))
        } catch (e) {
          // 不是JSON格式，保持原样
        }
        this.configCache[key] = value
        return value
      }
      return defaultValue
    } catch (error) {
      console.error(`获取配置 ${key} 失败:`, error)
      return defaultValue
    }
  }

  /**
   * 清除缓存
   * @param key 可选，指定要清除的键，如果不指定则清除所有缓存
   */
  public static clearCache(key?: string): void {
    if (key) {
      delete this.configCache[key]
    } else {
      this.configCache = {}
    }
  }

  /**
   * 获取验证码是否启用的配置
   * @returns 是否启用验证码
   */
  public static async getCaptchaEnabled(): Promise<boolean> {
    return this.getConfig('captcha.enabled', true)
  }
}
